package com.suiwei.base;

// 作用：简化匿名内部类的代码写法；jdk8之后出现的一种新语法形式
// Lambda表达式通常使用 (argument) -> {body}语法书写;
// （匿名内部类被重写方法的形参列表）->{被重写方法的方法体代码}
// lambda表达式只允许操作函数式编程接口：有，且仅有一个抽象方法的接口
// 注：->是语法形式，无实际含义
// 与匿名内部类区别：
//      匿名内部类：可以操作类、接口
//      lambda表达式：只能操作函数式接口
//
public class Lambda {
  public static void main(String[] args) {
    // 普通写法
    userDemo(
        new Demo() {
          @Override
          public void show() {
            System.out.println("匿名内部类普通写法");
          }
        });
    // lambda写法
    userDemo(
        () -> {
          System.out.println("lambda写法");
        });
    // 省略写法 参数类型可以省略不写
    // 如果只有一个参数，()可以省略不写
    // 如果方法体只有一行代码，{}可以省略不写，同时要省略分号
    // 如果是return语句，return必须省略
    userDemo1(a -> a + 1);
  }

  public static void userDemo(Demo demo) {
    demo.show();
  }

  public static void userDemo1(Demo1 demo) {
    demo.show(10);
  }
}

interface Demo {
  public void show();
}

interface Demo1 {
  public int show(int a);
}
